#ifndef PLUGINAVTEST_H
#define PLUGINAVTEST_H

#include <QMutex>
#include <QMetaObject>

#include <QWidget>

#include "../../DevBase/dllQLsPluginsManager/qlsinterface.h"
#include "qlsavtest.h"

class PluginAVTest :
		public QWidget,
		public QLsInterface
{
	Q_OBJECT

	/* 宏注册信息 */
#if QT_VERSION > 0x050000 //定义到Qt5
	/* 接口声明 */
	Q_INTERFACES(QLsInterface)
	/* Q_PLUGIN_METADATA宏用于描述插件元数据 */
	Q_PLUGIN_METADATA(IID QLsInterface_iid FILE "pluginAVTest.json")
#endif // QT_VERSION < 0x050000

public:
	explicit PluginAVTest(QWidget *parent = nullptr);
	~PluginAVTest();

	/* 获取插件信息 */
	virtual InterfaceInfo *GetInterfaceInfo() override;
	/* 返回一个Widget设置到centerwidget中进行显示 */
	virtual QWidget *GetPluginWidget() override;
	/* 销毁插件 */
	virtual void Destroy() override;
	/* 绑定 切换主题 信号槽 */
	virtual void connetChangeTheme(void *sigClass) override;
	/* 绑定 最小尺寸变化 的信号槽 */
	virtual void connectChangeMinimumSize(void *slotClass) override;

private:
	/* 读取json文件格式内的插件数据 */
	void ReadPluginDataFromJsonFile();

private slots:
	/* 切换主题的槽函数 */
	void slotChangeTheme(const QString &themeName);

private:
	static QMutex g_centerMutex;
	static QLsAVTest *g_centerWidget;

	InterfaceInfo *m_interfaceInfo;						/* 插件信息 */

	QString m_curTheme;									/* 当前主题 */
	QMetaObject::Connection m_changeThemeConn;			/* 切换主题的信号槽关联 */
	QMetaObject::Connection m_changeMinimumSizeConn;	/* 最小尺寸变化的信号槽关联 */
};


#endif // PLUGINAVTEST_H
